name: build

on: [push, pull_request]

env:
  PYTEST_ADDOPTS: "--color=yes"

jobs:

  test:
    name: Test - ${{ matrix.python-version }}
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: [3.6, 3.7, 3.8, 3.9]

    steps:
      - uses: actions/checkout@v2
      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v2
        with:
          python-version: ${{ matrix.python-version }}
      - name: Set up Pip cache
        uses: actions/cache@v2
        id: pip-cache
        with:
          path: ~/.cache/pip
          key: pip-${{ hashFiles('**/pyproject.toml') }}
      - name: Upgrade Pip
        run: python -m pip install --upgrade pip
      - name: Install Poetry
        run: python -m pip install poetry
      - name: Set up Poetry cache
        uses: actions/cache@v2
        id: poetry-cache
        with:
          path: ~/.cache/pypoetry/virtualenvs
          key: poetry-${{ hashFiles('**/poetry.lock') }}
      - name: Install dependencies
        run: |
          poetry run pip install --upgrade pip
          poetry install
      - name: Run tests
        run: poetry run invoke tests


  lint:
    name: Lint
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - name: Set up Python
        uses: actions/setup-python@v2
        with:
          python-version: 3.7
      - name: Set Poetry cache
        uses: actions/cache@v2
        id: poetry-cache
        with:
          path: ~/.cache/pypoetry/virtualenvs
          key: poetry-${{ hashFiles('**/poetry.lock') }}
      - name: Upgrade Pip
        run: python -m pip install --upgrade pip
      - name: Install Poetry
        run: python -m pip install poetry
      - name: Install dependencies
        run: |
          poetry run pip install --upgrade pip
          poetry install
      - name: Run linters
        run: poetry run invoke lint


  deploy:
    name: Deploy
    environment: Deployment
    needs: [test, lint]
    runs-on: ubuntu-latest
    if: ${{ github.ref=='refs/heads/main' && github.event_name!='pull_request' }}

    steps:
      - uses: actions/checkout@v2
      - name: Setup Python
        uses: actions/setup-python@v2
        with:
          python-version: 3.7
      - name: Check release
        id: check_release
        run: |
          python -m pip install --upgrade pip
          python -m pip install poetry githubrelease autopub httpx==0.16.1
          echo "##[set-output name=release;]$(autopub check)"
      - name: Publish
        if: ${{ steps.check_release.outputs.release=='' }}
        env:
          GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
          PYPI_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
        run: |
          git remote set-url origin https://$GITHUB_TOKEN@github.com/${{ github.repository }}
          autopub prepare
          poetry build
          autopub commit
          autopub githubrelease
          poetry publish -u __token__ -p $PYPI_PASSWORD
